package com.ygqh.baby.mapper;

import java.util.Date;
import java.util.List;
import java.util.Map;

import com.ygqh.baby.ao.RefundStatus;
import com.ygqh.baby.model.wdt.qyb.PushOrderToWdtResult;
import org.apache.ibatis.annotations.Param;
import org.junit.runners.Parameterized.Parameters;

import com.ygqh.baby.ao.QueryInfo;
import com.ygqh.baby.model.Comment4TaskModel;
import com.ygqh.baby.model.OrderSkuTaxRates;
import com.ygqh.baby.model.YgOrder4CommentModel;
import com.ygqh.baby.po.YgOrderDetail;
import com.ygqh.baby.po.YgOrderDetailExample;

public interface YgOrderDetailMapper {
	int countByExample(YgOrderDetailExample example);

	int deleteByExample(YgOrderDetailExample example);

	int deleteByPrimaryKey(Long id);

	int insert(YgOrderDetail record);

	int insertSelective(YgOrderDetail record);

	int insertBatch(List<YgOrderDetail> list);

	List<YgOrderDetail> selectByExample(YgOrderDetailExample example);

	YgOrderDetail selectByPrimaryKey(Long id);

	int updateByExampleSelective(@Param("record") YgOrderDetail record, @Param("example") YgOrderDetailExample example);

	int updateByExample(@Param("record") YgOrderDetail record, @Param("example") YgOrderDetailExample example);

	int updateByPrimaryKeySelective(YgOrderDetail record);

	int updateByPrimaryKey(YgOrderDetail record);

	int countSuper(@Param("q") String q);

	List<YgOrderDetail> selectSuper(@Param("queryInfo") QueryInfo queryInfo, @Param("q") String q);

	int updateBatch(@Param("list") List<YgOrderDetail> list);

	List<YgOrder4CommentModel> selectWaitingComment(@Param("orderId") Long orderId, @Param("userId") Long userId);

	List<Comment4TaskModel> selectProductComment4Task(@Param("limitDate") Date limitDate);

	/**
	 * 不要轻易使用，使用前看一下sql是否满足要求，最初只支持remark的更新
	 * 
	 * @param detailList
	 * @return
	 */
	int updateDetailBatch(@Param("detailList") List<YgOrderDetail> detailList);

	/**
	 * 更新发货
	 * 
	 * @param sendDetailList
	 * @return
	 */
	int updateDetailSendBatch(@Param("sendDetailList") List<YgOrderDetail> sendDetailList);

	List<YgOrderDetail> selectByOrderId(@Param("orderId") Long orderId);

	/**
	 * 该方法没有非空判断 ，更新 refund_status, send_mark 两个字段
	 * 
	 * @Title: updateRefundStatusByReturn
	 * @param detailList
	 *            入参
	 * @return int 返回类型
	 * @author （guohao）
	 * @throws
	 * @date 2017年10月23日 下午5:33:49
	 * @version V1.0
	 */
	int updateRefundStatusByReturn(@Param("detailList") List<YgOrderDetail> detailList);

	int updateDetailSendBatchBySkuCde(@Param("sendDetailList") List<YgOrderDetail> sendDetailList);

	int cancelRefundMarkByOids(@Param("oIds") List<Long> oIds);
	/**
	 * 根据产品名称和销售日期导出销售明细
	 * @param productIds
	 * @return
	 */
	List<Map<String, Object>> selectOrderByProductId(@Param("startTime")Date startDate,
													 @Param("endTime")Date endDate,@Param("q")String q,
													 @Param("platformNo") String platformNo);
	/**
	 * 根据产品id 更新产品所属商家
	 * @param productIds
	 * @param supplierId
	 */
	void updateDetailSupplierId(@Param("productIds")Long[] productIds, @Param("supplierId")Long supplierId);

	List<YgOrderDetail> selectByOrderIds(@Param("orderIds")Long[] orderIds);

	int updateRefundStatusById(@Param("list") List<Long> idList, @Param("refundStatus") RefundStatus refundStatus);

	List<OrderSkuTaxRates> getOrderSkuTaxRates(Long orderId);

	/**
	 * 是否存在某商家商品
	* @Title: existSupplierGoods 
	*  @param orderId
	*  @param supplierId
	*  @return    入参
	* @return Boolean    返回类型
	* @author （guohao） 
	* @throws
	* @date 2018年11月26日 下午1:48:21 
	* @version V1.0
	 */
	Boolean existSupplierGoods(@Param("orderId") Long orderId, @Param("supplierId") Long supplierId);

	/**
	 * 获取订单已推送旺店通次数
	 * @param orderId 订单号
	 * @return 推送次数
	 */
    int getAlreadyPushWdtTimes(@Param("orderId") Long orderId);

	int updateWdtCodeBatch(@Param("resultList") List<PushOrderToWdtResult> resultList);

}
